# 导包
import numpy as np

# 构建矩阵
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(type(arr))
print(arr)

a = np.array(["1", "2", "3", "4"])
# 类型转换，返回新的ndarray
print(a.astype("int_"))

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, ])
# 索引
print(arr[0])
print(arr[-1])

arr1 = np.array([[1, 2, 3], [4, 5, 6]])
print(arr1)
# 获取第一行
print(arr1[0])

# 获取第一列(切片)
print(arr1[:, 0])

# 切片
# arr[开始位置:结束位置:步长]
arr2 = np.array([[1, 2, 3, 4, 5, 6, 7, 8],
                 [1, 2, 3, 4, 5, 6, 7, 8],
                 [1, 2, 3, 4, 5, 6, 7, 8],
                 [1, 2, 3, 4, 5, 6, 7, 8],
                 [1, 2, 3, 4, 5, 6, 7, 8],
                 [9, 2, 3, 4, 5, 6, 7, 8]])

print(arr2[1:4, 3:6])
print(arr2[:, ::2])
print(arr2[:, ::-1])  # 左右翻转
print(arr2[::-1, ::])  # 上下翻转

# 指定坐标获取数据
print(arr2[(0, 1, 2, 3, 4, 5), (2, 3, 4, 5, 6, 7)])

# 同时取多列
print(arr2[:, [0, 3, 4]])

# 比较矩阵中的每一个元素
print(arr2 > 5)

# 布尔值索引
# 如果返回True保留数据，如果返回false过滤数据
print(arr2[arr2 > 5])

# 取出所有的偶数
print(arr2[arr2 % 2 == 0])

# 数学运算
x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])

print(x * 2)

# 套数学公式
y = 3 * x ** 2 + x + 100
print(y)

# 对位运算,两个多维数组的形状要一样
arr1 = np.array([[1, 2, 3],
                 [4, 5, 6]])

arr2 = np.array([[2, 2, 2],
                 [2, 2, 2]])

print(arr1 + arr2)
print(arr1 - arr2)
print(arr1 * arr2)
print(arr1 / arr2)
print(arr1 % arr2)
print(arr1 // arr2)

# 矩阵相乘
arr1 = np.array([[1, 2, 3],
                 [4, 5, 6]])

arr2 = np.array([[2, 2, 2],
                 [2, 2, 2]])

# T:转置
print(arr2.T)

# dot：矩阵相乘
print(arr1.dot(arr2.T))
